--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Commit 28f930905eee67c8d0b8a24d08a5937f41cea0ae
Parents : abab8ec
Author : Mark Qvist <bc7291552be7a58f361522990465165c>
Signature : T66BB85Valid, signed by author
Date : 2026-07-16T15:15:19+02:00
Improved PN sync feedback
Changes
2 files changed, 30 insertions(+), 50 deletions(-)
Diff
diff --git a/sbapp/main.py b/sbapp/main.py
index fb22cfad..2c1603cd 100644
--- a/sbapp/main.py
+++ b/sbapp/main.py
@@ -3119,23 +3119,15 @@ class SidebandApp(MDApp):
def lxmf_sync_request(self, sender):
if self.sideband.message_router.get_outbound_propagation_node() == None:
yes_button = MDRectangleFlatButton(text="OK",font_size=dp(18))
-
- dialog = MDDialog(
- title="Can't Sync",
- text="No active LXMF propagation nodes were found. Cannot fetch messages. Wait for a Propagation Node to announce on the network, or manually specify one in the settings.",
- buttons=[ yes_button ],
- # elevation=0,
- )
- def dl_yes(s):
- dialog.dismiss()
-
+ dialog = MDDialog(title="Can't Sync", buttons=[ yes_button ],
+ text="No active LXMF propagation nodes were found. Cannot fetch messages. Wait for a Propagation Node to announce on the network, or manually specify one in the settings.")
+ def dl_yes(s): dialog.dismiss()
yes_button.bind(on_release=dl_yes)
dialog.open()
+
else:
- if self.sideband.config["lxmf_sync_limit"]:
- sl = self.sideband.config["lxmf_sync_max"]
- else:
- sl = None
+ if self.sideband.config["lxmf_sync_limit"]: sl = self.sideband.config["lxmf_sync_max"]
+ else: sl = None
sync_title = "LXMF Sync"
if not hasattr(self, "message_sync_dialog") or self.message_sync_dialog == None:
@@ -3143,13 +3135,8 @@ class SidebandApp(MDApp):
stop_button = MDRectangleFlatButton(text="Stop",font_size=dp(18), theme_text_color="Custom", line_color=self.color_reject, text_color=self.color_reject)
dialog_content = MsgSync()
- dialog = MDDialog(
- title=sync_title,
- type="custom",
- content_cls=dialog_content,
- buttons=[ stop_button, close_button ],
- # elevation=0,
- )
+ dialog = MDDialog(title=sync_title, type="custom", content_cls=dialog_content,
+ buttons=[ stop_button, close_button ])
dialog.d_content = dialog_content
def dl_close(s):
self.sideband.setstate("app.flags.lxmf_sync_dialog_open", False)
@@ -3161,8 +3148,7 @@ class SidebandApp(MDApp):
def dl_stop(s):
self.sideband.cancel_lxmf_sync()
- def cb(dt):
- self.widget_hide(self.sync_dialog.stop_button, True)
+ def cb(dt): self.widget_hide(self.sync_dialog.stop_button, True)
Clock.schedule_once(cb, 0.25)
close_button.bind(on_release=dl_close)
diff --git a/sbapp/sideband/core.py b/sbapp/sideband/core.py
index e412bdea..4f93425f 100644
--- a/sbapp/sideband/core.py
+++ b/sbapp/sideband/core.py
@@ -5527,32 +5527,26 @@ class SidebandCore():
return self.config["display_name"].encode("utf-8")
def get_sync_status(self):
- if self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_IDLE:
- return "Idle"
- elif self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_PATH_REQUESTED:
- return "Path requested"
- elif self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_LINK_ESTABLISHING:
- return "Establishing link"
- elif self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_LINK_ESTABLISHED:
- return "Link established"
- elif self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_REQUEST_SENT:
- return "Sync request sent"
+ if self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_IDLE: return "Idle"
+ elif self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_PATH_REQUESTED: return "Path requested"
+ elif self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_LINK_ESTABLISHING: return "Establishing link"
+ elif self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_LINK_ESTABLISHED: return "Link established"
+ elif self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_REQUEST_SENT: return "Sync request sent"
+ elif self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_RESPONSE_RECEIVED: return "Messages received"
+ elif self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_NO_PATH: return "No path to propagation node"
+ elif self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_LINK_FAILED: return "Link establisment failed"
+ elif self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_TRANSFER_FAILED: return "Sync request failed"
+ elif self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_NO_IDENTITY_RCVD: return "No identity received by remote"
+ elif self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_NO_ACCESS: return "No access to specified node"
+ elif self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_FAILED: return "Sync failed"
elif self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_RECEIVING:
- return "Receiving messages"
- elif self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_RESPONSE_RECEIVED:
- return "Messages received"
- elif self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_NO_PATH:
- return "No path to propagation node"
- elif self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_LINK_FAILED:
- return "Link establisment failed"
- elif self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_TRANSFER_FAILED:
- return "Sync request failed"
- elif self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_NO_IDENTITY_RCVD:
- return "No identity received by remote"
- elif self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_NO_ACCESS:
- return "No access to specified node"
- elif self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_FAILED:
- return "Sync failed"
+ if self.message_router.propagation_transfer_size and self.message_router.propagation_transfer_progress != None:
+ received = self.message_router.propagation_transfer_size*self.message_router.propagation_transfer_progress
+ try: return f"Receiving messages, {round(self.message_router.propagation_transfer_progress*100, 1)}% ({RNS.prettysize(received)} of {RNS.prettysize(self.message_router.propagation_transfer_size)})"
+ except Exception as e:
+ RNS.log(f"Error while calculating message transfer size: {e}", RNS.LOG_ERROR)
+ return "Receiving messages"
+ else: return "Receiving messages"
elif self.message_router.propagation_transfer_state == LXMF.LXMRouter.PR_COMPLETE:
msgs_dld = self.message_router.propagation_transfer_last_result
duplicates = self.message_router.propagation_transfer_last_duplicates or 0
@@ -5565,8 +5559,8 @@ class SidebandCore():
else:
if duplicates == 0: return f"Downloaded {new_msgs} new message{nms}"
else: return f"Downloaded {new_msgs} new message{nms}\nDiscarded {duplicates} existing message{dms}"
- else:
- return "Unknown"
+
+ else: return "Unknown"
def cleanup(self):
if RNS.vendor.platformutils.get_platform() == "android":
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────